#ifndef STUDENT_H
#define STUDENT_H
#include "Observer.h"

class StudentImpl;
class University_t;
class Faculty_t;


//Student_t implements Bridge,Observer design pattern
class Student_t : public Observer{

public:
	int getTuition() const;

	Student_t(StudentImpl* pImpl, University_t* pUv);

	virtual void	Update(Subject* changedSbj);

	~Student_t();

protected:
	StudentImpl* m_pStudentImpl;

};

class StudentImpl {

public:
	StudentImpl(University_t* pUniversity,Faculty_t* pFaculty, int t);
	int				getTuition() const;
	virtual			~StudentImpl();
    virtual void	update(Subject* changedSbj);
protected:
	int m_tuition;

	University_t* m_pUV;

	Faculty_t* m_pFaculty;

};

class FOH_Student : public StudentImpl{
public:
	FOH_Student(University_t* pUniversity,Faculty_t* pFaculty, int t);
	~FOH_Student() {};
	virtual void update(Subject* changedSbj);
};

class ESF_Student : public StudentImpl{
public:
	ESF_Student(University_t* pUniversity,Faculty_t* pFaculty, int t);
	~ESF_Student() {};
	void update(Subject* changedSbj);

};

#endif